/**
 ******************************************************************************
 * @file           : bsp_w25qxx_config.h
 * @brief          : W25Qxx Configuration File
 ******************************************************************************
 * @attention
 *
 * W25Qxx SPI Flash配置文件
 * 用户根据实际硬件修改此文件
 *
 ******************************************************************************
 */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __BSP_W25QXX_CONFIG_H
#define __BSP_W25QXX_CONFIG_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "stm32f1xx_hal.h"

/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/

/* ============================================================================ */
/*                        硬件配置（改这里）                                      */
/* ============================================================================ */

/**
 * SPI接口选择
 * 选项：1=使用BSP层SPI驱动, 0=直接使用HAL库
 */
#define W25QXX_USE_BSP_SPI      0

#if (W25QXX_USE_BSP_SPI == 1)
    /* 使用BSP层SPI驱动 */
    #include "./BSP/SPI/bsp_spi.h"
#else
    /* 直接使用HAL库 */
    extern SPI_HandleTypeDef hspi1;         /* SPI句柄（需要用户定义） */
    #define W25QXX_SPI_HANDLE   &hspi1
#endif

/**
 * CS片选引脚配置
 */
#define W25QXX_CS_GPIO_PORT     GPIOA
#define W25QXX_CS_GPIO_PIN      GPIO_PIN_4

/**
 * 芯片型号选择
 * W25Q80   = 8Mbit  = 1MB
 * W25Q16   = 16Mbit = 2MB
 * W25Q32   = 32Mbit = 4MB
 * W25Q64   = 64Mbit = 8MB
 * W25Q128  = 128Mbit = 16MB
 */
#define W25QXX_CHIP_SIZE        (8 * 1024 * 1024)   /* 8MB (W25Q64) */

/* ============================================================================ */
/*                       日志系统配置（改这里的数字）                             */
/* ============================================================================ */
/* 日志后端选择：1=EasyLogger, 2=printf, 0=关闭 */
#define W25QXX_USE_LOG          1

/* 根据配置自动定义日志宏 */
#if (W25QXX_USE_LOG == 1)
    /* 使用EasyLogger */
    #ifndef LOG_TAG
        #define LOG_TAG    "W25Qxx"
    #endif
    #include "elog.h"
    
#elif (W25QXX_USE_LOG == 2)
    /* 使用printf */
    #include <stdio.h>
    #define log_i(fmt, ...)     printf(fmt "\r\n", ##__VA_ARGS__)
    #define log_w(fmt, ...)     printf("[WARN] " fmt "\r\n", ##__VA_ARGS__)
    #define log_e(fmt, ...)     printf("[ERROR] " fmt "\r\n", ##__VA_ARGS__)
    #define log_d(fmt, ...)     printf("[DEBUG] " fmt "\r\n", ##__VA_ARGS__)
    
#else
    /* 关闭日志 */
    #define log_i(fmt, ...)
    #define log_w(fmt, ...)
    #define log_e(fmt, ...)
    #define log_d(fmt, ...)
#endif

/* Exported macro ------------------------------------------------------------*/

/* CS片选控制宏 */
#define W25QXX_CS_LOW()     HAL_GPIO_WritePin(W25QXX_CS_GPIO_PORT, W25QXX_CS_GPIO_PIN, GPIO_PIN_RESET)
#define W25QXX_CS_HIGH()    HAL_GPIO_WritePin(W25QXX_CS_GPIO_PORT, W25QXX_CS_GPIO_PIN, GPIO_PIN_SET)

/* Exported variables --------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/

#ifdef __cplusplus
}
#endif

#endif /* __BSP_W25QXX_CONFIG_H */
